package online.niuma.xiaocubao.service;

import com.baomidou.mybatisplus.extension.service.IService;
import online.niuma.xiaocubao.pojo.entity.User;
import online.niuma.xiaocubao.pojo.vo.LoginUserVo;
import online.niuma.xiaocubao.pojo.vo.Result;
import online.niuma.xiaocubao.pojo.vo.UpdateUserInfoParam;
import org.springframework.web.multipart.MultipartFile;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 一颗蛋50斤
 * @since 2022-11-06
 */
public interface IUserService extends IService<User> {

    /**
     * todo 根据用户的账号和密码查出用户
     * @param account 账号
     * @param password 密码
     * @return 用户信息
     */
    LoginUserVo queryUserInfoByAccountAndPassword(String account, String password);

    /**
     * 验证账号和邮箱
     * 从数据库中查询账号和邮箱
     * 如果在数据库中没有传递过来的账号和邮箱返回一个空值
     * 如果账号存在，返回账号已经存在的警告
     * 如果邮箱存在，返回邮箱已经存在的警告
     * @param account 需要验证的账号
     * @param email 需要验证的邮箱
     * @return 验证的信息
     */
    Result checkAccountAndEmail(String account, String email);

    /**
     * 将用户的密码加密
     * 插入用户的信息
     * @param account 账号
     * @param password 密码
     * @param email 邮箱
     * @return 是否插入成功
     */
    boolean insertUserInfo(String account, String password, String email);

    /**
     * 修改用户的信息
     * 修改用户的昵称、邮箱和关联的账号
     * @param updateUserInfoParam 用户所需要修改的信息
     * @param token 用户的 token 值
     * @return 修改结果
     */
    Result updateUserInfo(String token, UpdateUserInfoParam updateUserInfoParam);

    /**
     * 修改用户的密码
     * @param oldPassword 原始密码
     * @param newPassword 新的密码
     * @return 修改的信息
     */
    Result updateUserPassword(String oldPassword, String newPassword);

    /**
     * 验证两个账号是否是相互关联的
     * @param account 用户的账号
     * @param linkAccount 关联的账号
     * @return 如果两个账号是关联的返回对方账号的邮箱，否则返回空
     */
    String checkMeRelationYou(String account, String linkAccount);

    /**
     * 修改用户的头像
     * @param file 头像文件
     * @param fileName 文件名称
     * @param token user token
     * @return 修改头像的信息
     */
    Result updateUserAvatar(MultipartFile file, String fileName, String token);
}
